Container是什麼?
雖然他依舊是一個很大的主題,但我們可以從技術是為了解決什麼問題開始瞭解起,並且介紹一下他的核心概念。
有一張圖(引用自容器技术的介绍)我蠻喜歡的XD
透過圖片可以看到像是煉蠱一樣,每個program其實都會有自己需要的依賴,甚至有可能有program需要同時運行不同版本,而他們各自都有對依賴的版本有所要求,那該怎麼辦才好?
於是我們出現了container!!
中文稱作容器,你可以說他是一種打包應用程式的技術,也可以說他是一個虛擬的空間,這些都大致描述container技術的輪廓。
透過一個比喻可能會更容易了解這個部分: container就像是貨輪上的一個個貨櫃。
從這裡可以描述container的一些特性
簡單來說,容器話技術就是透過各項資源的隔離,來達成資源的最大化利用。
有些人可能會開始覺得有點熟悉...
不是有個技術叫做virtual machine也可以多開嗎?
再來一張來自微軟描述Docker的圖~
從這裡可以看到差異,Container能在共用OS的狀況下,運作多個Process,並使用OS在做process scheduling。
也因為是共用OS,所以他足夠輕量、開啟速度又足夠快。
但這樣我們就能夠說container比vm好嗎?
也不是的,事實上沒有孰好孰壞的問題,因為兩個技術想解決的問題是不太相同的,引用我自己的話XD
虛擬機希望解決的問題是在機器層面上隔離,共用的部分是主機的硬體;而container則是在在應用程式層面上隔離,共用的部分是作業系統環境。
基本上container的技術由三個重要的概念支持: container、image、registry
他們三個的關係環環相扣
之前曾經想過一篇跟docker有關的介紹,在這裡,就不再多寫了XD
因為是讀書會的題目,所以也有完整的系列文,歡迎來看~~
根據官方文件:
What is Podman? Podman is a daemonless container engine for developing, managing, and running OCI Containers on your Linux System. Containers can either be run as root or in rootless mode. Simply put: alias docker=podman. More details here.
他甚至還在介紹裡面直接跟你說你可以直接把podman alias成docker XDD
雖然有點好笑,但大概也可以從中看到他的特色,及與docker的差異,甚至你可以說他認為自己docker的某種改進:
無背景的daemonless:
docker有個問題在於他是使用daemon來管理全部的process(container)的,如果daemon掛掉了,所有的process也就掰了,不過podman就並非如此
非root權限:
docker的操作都必須用root或是具有相同權限的帳號操作,這會造成安全問題。(話說現在也支援rootless了)
易從docker移植
他提供docker相容的指令,用戶可以輕鬆地從docker移植過去
不過也有一些吐槽: 包括速度慢、bug多等。
不過因為我沒實際用過就不多說什麼了,不過看起來大家會使用他的原因多半都是rootless而去的。
恩...雖然不像,但今天是最後一天的Road Map之旅XD
但其實還有大概好幾天的內容可以寫,等我好好地給他休息好一陣子再來看看要不要接續寫完XD
也是最後一次自我推銷部落格了,我覺得文章寫出來還是希望被別人看到的,最好有些幫助,有些批評,這樣可以開心、也可以有所調整!!
所以~~~
此文章同步發表於部落格,歡迎來逛逛~
Docker系列讀書會I-初步介紹Docker
容器和 Docker 簡介
容器技术的介绍
想請教本身算是有擦邊的科系的私立普大大四生(通訊),
線代、演算法、資結修過但大致上都還回去了,
資工六大科目其他都沒修過,
目前是以 Junior 後端為目標,
希望至少起薪 40k ,
有需要 roadmap 的部分都摸透嗎?
目前自己預計的規劃是如下:
前端 - HTML、CSS、JS 暫時以三本柱就好,有機會再去接觸框架
語言 - JS
框架 - Node.js、Express.js、Nest.js 稍微去了解
資料庫 - PostegreSQL、Redis、MongoDB
版本控制 - Git / GitHub
測試 - Jest ? 這部分比較不了解,但網路上好像建議可以去了解 TDD
CI/CD - GitHub Action? 這也是不太了解,但看蠻多新人職缺好像也都會希望有接觸過
容器 - Docker、K8s 好像是微服務會用到?這也是不太了解
雲端 - AWS 若有時間會看考照的課程去大致了解架構跟應用場景
其餘像 RabbitMQ、Kafka、ElasticSearch 這些有看到路線圖有,
但目前爬文實在不太清楚用途,
所以暫時沒有打算排到規劃中,
目前是希望可能做個兩個 Project 去面試,
盡量把上面列出來的都有應用到,
不知道這樣是否足夠呢?
或著說建議可以刪除、調整哪些?
我非常個人的意見是,如果你不是要求要馬上去要求特別嚴格的公司,而是先求一個起步,其餘再持續學習的話,可以分兩個部分討論:
具備基礎實務能力
以上面這些作為基礎去完成一個作品證明自己
上述實務能力的基礎觀念
其餘網路開發相關知識
這裡其實我也有點忘記我補過哪些,不過總的來說是越廣越好,最大的好處是大部分東西都有概念,學習起來會快很多。
最後才是根據你想進的公司去針對性地補充相關知識及工具,測試、容器化(docker)、CICD、IaaS(AWS、GCP、Azure...)
我一開始其實並沒有照roadmap完成XD
OS跟一些細節像是HTTPS等都是後續才持續學習去補足的~
感謝回覆!
自學途中真的走得很不安,
很不確定自己這樣規劃到底對不對,
真的是豁然開朗,
先把基礎打穩再慢慢往後學好了,
畢竟現在去看面試題感覺都回答不出個所以然@@